<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // ES6 允许按照一定模式，从数组和对象中提取值，对变量进行赋值，这被称为解构（Destructuring）。
    // 本质上，这种写法属于“模式匹配”，只要等号两边的模式相同，左边的变量就会被赋予对应的值。


    // 数组解构  (对应下标)

    var arr = [1,2,3];

    // var [a,b,c] = [1,2,3];
    // console.log(a,b,c);

    // var [a,b,c] = [1,2,3,4];
    // console.log(a,b,c);  // 1 2 3

    // var [a,b,,c] = [1,2,3,4];
    // console.log(a,b,c);  // 1 2 4

    // var [a,b,c,d] = [1,2,3,4];
    // console.log(a,b,c,d);   // 1 2 3 4

    // 如果解构不成功，变量的值就等于undefined。
    // var [a,b,c,d] = [1,2,3];
    // console.log(a,b,c,d);   // 1 2 3  undefined

    // 在解构过程中,可以设置变量的默认值 (如果取不到就使用默认值 去得到就对应赋值)
    // var [a,b,c,d=0] = [1,2,3];
    // d = d == undefined ? 0 : d; // 默认值
    // console.log(a,b,c,d);   // 1 2 3

    // 注意:如果等号的右边不是数组（或者严格地说，不是可遍历的结构(数组/伪数组/字符串)），那么将会报错。
    // let [foo] = 1;
    // let [foo] = false;
    // let [foo] = NaN;
    // let [foo] = undefined;
    // let [foo] = null;
    // let [foo] = {};

    // 字符串
    // var [a,b,c] = "abc";
    // console.log(a,b,c);

    // 伪数组
    // function fn(){
    //     console.log(arguments);
    //     var [a,b,c,d] = arguments;
    //     console.log(a,b,c,d);
    // }

    // fn(2,8,4,6);

    // 二维数组和多维数组的解构
    // var arr = [1,[2,3],4];
    // var [a,b,c] = [1,[2,3],4];
    // console.log(a,b,c);
    // var [b1,b2] = b;
    // console.log(b1,b2);

    // 简写
    // var [a,[b1,b2],c] = [1,[2,3],4];
    // console.log(a,b1,b2,c);

    // var [a,[b,c],d] = [1,[2,3],4];
    // console.log(a,b,c,d);


    // var arr = [1,[2,3,[4,5]],6];
    // var [a,[b,c,[d,e]],f] = arr;
    // console.log(a,b,c,d,e,f);

    // var [a,[b,,[c,]],d] = arr;
    // console.log(a,b,c,d);







</script>
</html>